Ruby, 126 bytes
->s{(t=*1..s).product(t,t).map{|i|r,x,y=i
x==y||!(x*x+y*y<q=r*r)||(q-x*x)**0.5%1+(n=x+j=(q-y*y)**0.5)%1>0||n>s||p([j-x,n,r])}}
Scans all potential integer intersection points x,y inside circles of diameters r and checks if the half-lengths of the chords are integers. Didn't work out as well as I had hoped as I had to add an extra condition to eliminate cases where n is greater than the input value.
Proof that for valid solutions the intersection coordinates of x,y must fall on an integer grid
n and m are integers so n+m is an integer. x = (n+m)/2-m must be an integer if n+m is even, or integer + 0.5 if n+m is odd. A similar argument follows for y.
If x is an integer + 0.5, then x*x will be an integer + 0.25. Similarly for y, and for the endpoints of the chords. By pythagoras, r*r = (x+m)*(x+m) + y*y is then not an integer, so r is not an integer. But the question requires it to be an integer. To avoid this contradiction x and y must both be integers.
Going back to the first point, this means the total length of chords (n+m) is always even.